class LocalStorageService {
  constructor (prefix = '') {
    this.prefix = prefix
  }

  // 存储数据，支持设置过期时间（单位：分钟）
  setItem (key, value, ttlMinutes = null) {
    try {
      const item = {
        value: JSON.stringify(value),
        expires: ttlMinutes ? Date.now() + ttlMinutes * 60 * 1000 : null // 计算过期时间戳
      }
      localStorage.setItem(this.prefix + key, JSON.stringify(item))
    } catch (e) {
      console.error('Failed to save data to localStorage:', e)
    }
  }

  // 获取数据，检查是否已过期
  getItem (key) {
    const itemStr = localStorage.getItem(this.prefix + key)
    if (!itemStr) return null

    try {
      const item = JSON.parse(itemStr)
      if (this.isExpired(item.expires)) {
        this.removeItem(key) // 数据已过期，删除
        return null
      }
      return JSON.parse(item.value)
    } catch (e) {
      console.error('Failed to get data from localStorage:', e)
      return null
    }
  }

  // 检查数据是否过期
  isExpired (expires) {
    return expires !== null && Date.now() > expires
  }

  // 删除单个数据
  removeItem (key) {
    localStorage.removeItem(this.prefix + key)
  }

  // 清除所有带有前缀的数据
  clear () {
    for (let i = localStorage.length - 1; i >= 0; i--) {
      const key = localStorage.key(i)
      if (key && key.startsWith(this.prefix)) {
        localStorage.removeItem(key)
      }
    }
  }

  // 检查某个键是否存在
  hasKey (key) {
    return localStorage.hasOwnProperty(this.prefix + key)
  }
}

// 使用示例
const storage = new LocalStorageService('myApp_')

storage.setItem('user', { name: 'John Doe', age: 30 }, 60) // 存储数据，设置1小时后过期
const user = storage.getItem('user') // 获取数据
console.log(user)

// 其他方法使用...
